package datastructure;

/**
 * a。 缓存
 * b。重叠子问题
 * c。记忆化
 * d。递归
 * e。无后效性，最优子结构
 *
 * 计算机的本质是一个状态机，
 * 内存里存储的所有数据构成了当前的状态，
 * CPU只能利用当前的状态计算出下一个状态
 *
 *
 * 当你企图使用计算机解决一个问题是，
 * 其实就是在思考如何将这个问题表达成状态（用哪些变量存储哪些数据）
 * 以及如何在状态中转移（怎样根据一些变量计算出另一些变量）。
 * 所以所谓的空间复杂度就是为了支持你的计算所必需存储的状态最多有多少，
 * 所谓时间复杂度就是从初始状态到达最终状态中间需要多少步！
 *
 * 下一步最优是从当前最优得到的。
 * 所以为了计算最终的最优值，只需要存储每一步的最优值即可，
 * 解决符合这种性质的问题的算法就叫贪心。
 *
 * 每个阶段只有一个状态->递推；
 * 每个阶段的最优状态都是由上一个阶段的最优状态得到的->贪心；
 * 每个阶段的最优状态是由之前所有阶段的状态的组合得到的->搜索；
 * 每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到而不管之前这个状态是如何得到的->动态规划。
 *
 * 每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到这个性质叫做最优子结构；
 * 而不管之前这个状态是如何得到的这个性质叫做无后效性。
 *
 */
public class DP {
}
